//导入数据库
const query = require("../db/index");
//导入密码加密模块 bcryptjs
const bcrypt = require("bcryptjs");
//导入jwt
const jwt = require("jsonwebtoken");
//导入全局配置文件
const config = require("../config");
//注册新用户的处理函数
exports.regUser = (req, res) => {
  // 获取客户端提交到服务器的用户数据
  const userinfo = req.body;
  //对表单中的数据进行合法验证
  if (!userinfo.username || !userinfo.password) {
    return res.cc("用户名或密码不合法！");
  }

  //定义sql语句 查询用户名是否被占用
  const sqlStr = "select * from ev_users where username = ?";
  query(sqlStr, [userinfo.username])
    .then((results) => {
      if (results.length > 0) {
        return res.cc("用户名已被占用,请更换其他用户名！");
      }
      // TODO: 用户名可以使用
      //   调用 bcrypt.hashSync(明文密码, 随机盐的长度) 方法，对用户的密码进行加密处理：
      userinfo.password = bcrypt.hashSync(userinfo.password, 10);
      //   console.log(userinfo);
      const sql = "insert into ev_users set ?";
      query(sql, {
        username: userinfo.username,
        password: userinfo.password,
      })
        .then((result) => {
          //判断sql语句是否执行成功
          if (result.affectedRows !== 1)
            return res.cc("注册用户失败，请稍后重试！");
          //注册用户成功
          res.cc("注册成功!", 0);
        })
        .catch((err) => res.cc(err));
      // .catch((err) => res.send({ status: 1, message: err.message }));
    })
    // .catch((err) => res.send({ status: 1, message: err.message }));
    .catch((err) => res.cc(err));

  //   res.send("reguser");
};

//登录的处理函数
exports.login = (req, res) => {
  const userinfo = req.body;
  const sql = "select * from ev_users where username = ?";
  query(sql, userinfo.username)
    .then((result) => {
      //   if (result.length !== 1) return res.cc("登录失败！");
      // TODO: 判断密码是否正确
      const compareResult = bcrypt.compareSync(
        userinfo.password,
        result[0].password
      );
      if (!compareResult) return res.cc("登陆失败！");

      // 生成token字符串
      const user = { ...result[0], password: "", user_pic: "" };
      //   console.log(user);
      const tokenStr = jwt.sign(user, config.jwtSecretKey, {
        expiresIn: config.expiresIn, //有效期为60秒
      });
      //   console.log(tokenStr);
      //奖tokenStr响应给客户端
      res.send({
        status: 0,
        message: "登录成功！",
        token: "Bearer " + tokenStr,
      });
    })
    .catch((err) => res.cc(err));
};
